package scalapackage

/**
  * Created by Germmy on 2018/3/16.
  */
object Exercise {
  def main(args: Array[String]) {

    //创建一个List
    var list0 = List(9, 8, 7, 6, 0, 2, 1, 4, 3, 5,10)

    //将List0中每个元素乘以2后生成一个新的集合
    //方法1
    var list1 = list0.map(_ * 2)
    //    println(list1)

    var list2 = for (i <- list0) yield i * 2
    //    println(list2)


    //将list0的偶数取出来生成一个新的集合
    //    var list3 = list0.groupBy(_ % 2 == 0)
    //    var list6 = list0.map(_ % 2 == 0)

    var list6 = list0.filter(_ % 2 == 0)
    //    println(list6)

    //    println(list3)//Map(false -> List(9, 7, 1, 3, 5), true -> List(8, 6, 0, 2, 4)),不知道正不正确2？？？

    //将list0排序后生成一个新的集合
    var list4 = list0.sorted
    //    println(list4)


    //反转排序顺序
    var list5 = list0.sorted.reverse
    //    println(list5)


    //将list0中的元素4个一组，类型为Iterator[List[Int]]
    var list7 = list0.grouped(4)
//    println(list7.toBuffer)

    //将Iterator转换成List
    var list8=list7.toList
//    println(list8)

    //将多个List压扁成一个List
    var list9=list8.flatten//压平
//    println(list9)


    //先按空格切分再压平
    var myList=List("java is a beautiful girl","china is so big")
    var list10=myList.map(_.split(" ")).flatten
    var list11=myList.map(_.split(" "))
//    println(list11)

    var list12=myList.flatMap(_.split(" "))
//    println(list12)

    //并行计算求和
    var sum=list0.sum
//    println(sum)


    var sum1=list0.par.sum
//    println(sum1)

    //按照特定的顺序
    var sum2=list0.reduce(_+_)
//    println(sum2)

    var sum3=list0.par.reduceLeft(_-_)
    println(sum3)


    var sum4=list0.reduce(_-_)
//    println(sum4)





    val arr30=Array(1,2,3,4,5,6,7,8,9,10)
    //折叠：无顺序
    //用fold
    val res2=arr30.fold(0)(_+_)
//    println(res2)

    val res40=arr30.par.fold(10)(_+_)
//    println(res40)//每次结果都不相同，因为起的线程数不一样

    //折叠：有顺序
    val res41=arr30.foldLeft(10)(_+_)
//    println(res41)//每次结果都是65，因为它是单线程的



    //聚合(无顺序这一说)
    val list30=List(List(1,2,3),List(3,4,5),List(2))

    //
    //方法一：用flatten,sum
    val res=list30.flatten.sum
    //    println(res)

    //方法二：reduce
    val res1=list30.flatten.reduce(_+_)
    //    println(res)


    val res3=list30.aggregate(0)(_+_.sum,_+_)
//    println(res3)



    val l1=List(1,2,3,4)
    val l2=List(3,4,5,6)
    //并集
    val l3=l1 union l2
    val l4=l1.union(l2)
//    println(l3)
//    println(l4)

    //交集
    val l5=l1 intersect l2
//    println(l5)//期待结果3，4

    //差集
    val l6=l1 diff(l2)
//    println(l6)//期待结果1,2，以l1为主






  }
}
